﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;


//隐藏规则：
//1. 在继承体系中⽗类和⼦类都有独⽴的作⽤域。
//2. ⼦类和⽗类中有同名成员，⼦类成员将屏蔽⽗类对同名成员的直接访问，这种情况叫隐藏。（在⼦
//类成员函数中，可以使⽤ ⽗类::⽗类成员 显⽰访问）
//3. 需要注意的是如果是成员函数的隐藏，只需要函数名相同就构成隐藏。
//4. 注意在实际中在继承体系⾥⾯最好不要定义同名的成员。

class Base {
public:
	void func() {
		cout << "A::func()" << endl;
	}
};
class derive:public Base{
public:

	//func(int i)和func() 构成函数重载 ，因为它们在同一作用域下
	//A::func()和B::func(int i)/B::func() 构成隐藏,因为处于不同作用域

	void func(int i){
		cout << "B::func(int i)" << endl;
	}
	void func() {
		cout << "B::func()" << endl;
	}
private:
	int aa;
};
void test()
{
	derive d;
	d.func();
	d.func(2);
	d.Base::func();//利用作用域访问基类同名函数
}
int main()
{
	test();

	return 0;
}